package cn.com.yang.decorator.Handler;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * @Desc<...>
 * @Author 杨亿金
 * @Date 2020/8/30 17:49
 * @CopyRight
 * @Version
 */
public class LoggerHandler implements InvocationHandler {
    //通过下面的方法名的反射找到这个对象对象的方法
    private Object target;
    //通过构造方法接受一个没有被代理的原来的对象
    public LoggerHandler(Object target){
        this.target =target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        String className = target.getClass().getName();
        String methodName = method.getName();
        System.out.println(className+"."+methodName+"方法执行开始");
        //这里实际是Method类通过方法名反射调用了原方法（addOne\delOne）
        Object val = method.invoke(target,args);
        System.out.println(className+"."+methodName+"方法执行完毕");
        return val;
    }
}
